package com.rabbiter.hospital.controller;

import com.rabbiter.hospital.pojo.Arrange;
import com.rabbiter.hospital.service.ArrangeService;
import com.rabbiter.hospital.utils.ResponseData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/arrange")
public class ArrangeController {
    @Autowired
    private ArrangeService arrangeService;

    /**
     * 根据日期查询排班信息
     * 该方法通过HTTP请求来查询给定日期和时间段内的排班信息
     * @param arTime   查询的日期，格式为YYYY-MM-DD
     * @param dSection 查询的时间段，例如"08:00-12:00"
     * @return 包含查询结果的响应数据对象，成功时包含排班信息
     */
    @RequestMapping("findByTime")
    public ResponseData findByTime(@RequestParam(value = "arTime") String arTime, @RequestParam(value = "dSection") String dSection) {
        return ResponseData.success("根据日期查询排班信息成功", this.arrangeService.findByTime(arTime, dSection));
    }

    /**
     * 增加排班信息
     * 该方法用于接收客户端提交的排班信息，并尝试将其添加到数据库中
     * 需要确保请求中包含正确的排班信息，包括但不限于医生ID和日期
     * @param arrange 排班信息对象，包含所有排班的必要信息
     * @return ResponseData对象，包含操作状态和消息
     * 可能的返回结果包括：
     * - 增加排班信息成功
     * - 该医生该日已排班（表示尝试添加重复的排班信息）
     */
    @RequestMapping("addArrange")
    public ResponseData addArrange(Arrange arrange) {
        // 调用arrangeService的addArrange方法尝试添加排班信息
        // 该方法返回一个布尔值，表示添加操作是否成功
        if (this.arrangeService.addArrange(arrange))
            return ResponseData.success("增加排班信息成功");
        return ResponseData.fail("该医生该日已排班");
    }


    /**
     * 删除排班信息
     * 通过调用安排服务中的删除功能来移除特定的排班信息
     * @param arId 排班信息的唯一标识符
     * @return 返回一个响应数据对象，指示操作是否成功
     */
    @RequestMapping("deleteArrange")
    public ResponseData deleteArrange(String arId) {
        if (this.arrangeService.deleteArrange(arId))
            return ResponseData.success("删除排班信息成功");
        return ResponseData.fail("排班信息不存在");
    }


}
